home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / pyramid / code.lua next >
Encoding:
Text File  |  2005-07-16  |  10.6 KB  |  316 lines

  1.  
  2. local function viewY(model)
  3.     local shift_x, shift_y = model_getViewShift(model.index)
  4.     return model.Y + shift_y
  5. end
  6. local function incViewShift(model, shift_x, shift_y)
  7.     local oldShiftX, oldShiftY = model_getViewShift(model.index)
  8.     model_setViewShift(model.index,
  9.         oldShiftX + shift_x,
  10.         oldShiftY + shift_y)
  11. end
  12.  
  13. -- -----------------------------------------------------------------
  14. -- Init
  15. -- -----------------------------------------------------------------
  16. local function prog_init()
  17.     initModels()
  18.     sound_playMusic("music/rybky07.ogg")
  19.     local pokus = getRestartCount()
  20.  
  21.  
  22.     -- -------------------------------------------------------------
  23.     local function prog_init_room()
  24.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  25.  
  26.         if random(100) < 70 or pokus == 1 then
  27.             room.uvod = 0
  28.         end
  29.         room.hodinky = 0
  30.         room.cervik = 0
  31.         room.desticky = 0
  32.  
  33.         return function()
  34.             if isReady(small) and isReady(big) and no_dialog() then
  35.                 if room.uvod == 0 then
  36.                     if random(100) < 33 then
  37.                         addm(10 + random(20), "pyr-m-kam")
  38.                     elseif random(100) < 50 then
  39.                         addv(30 + random(30), "pyr-v-vsim")
  40.                     else
  41.                         addm(10 + random(20), "pyr-m-kam")
  42.                         addv(random(40), "pyr-v-vsim")
  43.                     end
  44.                     room.uvod = 1
  45.                 elseif room.hodinky == 0 and look_at(small, stela) and (small.Y > 14 and small.Y < 21) and (stela.afaze == 2 or stela.afaze == 4 or stela.afaze == 5) then
  46.                     addm(0, "pyr-m-nudi")
  47.                     addv(2 + random(3), "pyr-v-sark")
  48.                     if random(100) < 50 then
  49.                         addm(random(5), "pyr-m-comy")
  50.                     end
  51.                     if random(100) < 50 then
  52.                         addm(random(5), "pyr-m-zkus")
  53.                     end
  54.                     if random(100) < 50 then
  55.                         addm(random(5), "pyr-m-nic")
  56.                     end
  57.                     room.hodinky = 1
  58.                 elseif look_at(small, cerv) and room.cervik == 0 and (small.Y < viewY(cerv) + 2 and small.Y > viewY(cerv) - 2) and random(100) < 4 then
  59.                     addm(0, "pyr-m-plaz")
  60.                     if random(100) < 50 then
  61.                         addv(random(5), "pyr-v-druha")
  62.                         room.cervik = 1
  63.                     end
  64.                 elseif faraon.afaze == 2 and big.dir ~= dir_no and faraon.dir ~= dir_no and level_isNewRound() and random(100) < 20 then
  65.                     addv(0, "pyr-v-sfing")
  66.                     adddel(10)
  67.                 elseif room.desticky == 0 and random(100) < 3 and (look_at(small, deska1) and small.Y == deska1.Y and dist(small, deska1) < 2 and deska1.dir == dir_no or look_at(small, deska2) and small.Y == deska2.Y and dist(small, deska2) < 2 and deska2.dir == dir_no or look_at(small, deska3) and small.Y == deska3.Y and dist(small, deska3) < 2 and deska3.dir == dir_no) then
  68.                     addm(0, "pyr-m-dest")
  69.                     addv(random(15), "pyr-v-sbohem")
  70.                     room.desticky = 1
  71.                 end
  72.             end
  73.         end
  74.     end
  75.  
  76.     -- -------------------------------------------------------------
  77.     local function prog_init_faraon()
  78.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  79.  
  80.         faraon.delay = random(200) + 100
  81.  
  82.         return function()
  83.             if faraon.dir ~= dir_no then
  84.                 faraon.delay = random(20) + 15
  85.                 faraon.afaze = 2
  86.             end
  87.             if faraon.delay > 0 then
  88.                 faraon.delay = faraon.delay - 1
  89.             else
  90.                 switch(faraon.afaze){
  91.                     [0] = function()
  92.                         faraon.delay = random(20) + 20
  93.                         faraon.afaze = 1
  94.                     end,
  95.                     default = function()
  96.                         if isIn(faraon.afaze, {1, 2}) then
  97.                             faraon.delay = random(200) + 100
  98.                             faraon.afaze = 0
  99.                         end
  100.                     end,
  101.                 }
  102.             end
  103.             faraon:updateAnim()
  104.         end
  105.     end
  106.  
  107.     -- -------------------------------------------------------------
  108.     local function prog_init_stela()
  109.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  110.  
  111.         stela.konstanta = 10
  112.         stela.faze = 0
  113.         stela.delay = 0
  114.  
  115.         return function()
  116.             if stela.dir ~= dir_no then
  117.                 stela.afaze = 0
  118.                 stela.delay = 0
  119.                 stela.faze = 0
  120.             end
  121.             if stela.delay > 0 then
  122.                 stela.delay = stela.delay - 1
  123.             else
  124.                 local faze_table = {
  125.                     [0] = function()
  126.                         stela.delay = stela.konstanta * (random(30) + 50)
  127.                     end,
  128.                     [1] = function()
  129.                         stela.afaze = 1
  130.                         stela.delay = 0
  131.                     end,
  132.                     [2] = function()
  133.                         stela.delay = random(30) + 20
  134.                         stela.afaze = 2
  135.                     end,
  136.                     [3] = function()
  137.                         stela.afaze = 1
  138.                         stela.delay = 0
  139.                     end,
  140.                     [4] = function()
  141.                         stela.afaze = 0
  142.                         stela.delay = stela.konstanta * (random(20) + 30)
  143.                     end,
  144.                     [8] = function()
  145.                         stela.afaze = 0
  146.                         stela.delay = stela.konstanta * (random(10) + 20)
  147.                     end,
  148.                     [12] = function()
  149.                         stela.afaze = 0
  150.                         stela.delay = stela.konstanta * (random(5) + 5)
  151.                     end,
  152.                     [13] = function()
  153.                         stela.afaze = 3
  154.                         stela.delay = stela.konstanta * (random(20) + 30)
  155.                     end,
  156.                     [14] = function()
  157.                         stela.afaze = 4
  158.                         stela.delay = random(30) + 20
  159.                     end,
  160.                     [15] = function()
  161.                         stela.afaze = 3
  162.                         stela.delay = stela.konstanta * (random(10) + 20)
  163.                     end,
  164.                     [17] = function()
  165.                         stela.afaze = 3
  166.                         stela.delay = stela.konstanta * (random(5) + 5)
  167.                     end,
  168.                     default = function()
  169.                         stela.afaze = 5
  170.                         stela.delay = 30000
  171.                     end,
  172.                 }
  173.  
  174.                 faze_table[5] = faze_table[1]
  175.                 faze_table[9] = faze_table[1]
  176.  
  177.                 faze_table[6] = faze_table[2]
  178.                 faze_table[10] = faze_table[2]
  179.  
  180.                 faze_table[7] = faze_table[3]
  181.                 faze_table[11] = faze_table[3]
  182.  
  183.                 faze_table[16] = faze_table[14]
  184.  
  185.                 switch(stela.faze)(faze_table)
  186.                 stela.faze = stela.faze + 1
  187.             end
  188.             stela:updateAnim()
  189.         end
  190.     end
  191.  
  192.     -- -------------------------------------------------------------
  193.     local function prog_init_cerv()
  194.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  195.  
  196.         cerv.stav = -5
  197.         cerv.mez = random(15)
  198.  
  199.         return function()
  200.             if cerv.stav < 32 then
  201.                 cerv.stav = cerv.stav + 1
  202.             end
  203.             if cerv.stav == 30 then
  204.                 if viewY(cerv) > cerv.mez then
  205.                     cerv.stav = 0
  206.                 else
  207.                     cerv.mez = cerv.mez + 2 + random(21 - cerv.mez - 2)
  208.                 end
  209.             end
  210.  
  211.             local stav_table = {
  212.                 [0] = function()
  213.                     cerv.afaze = 0
  214.                 end,
  215.                 [5] = function()
  216.                     cerv.afaze = 1
  217.                 end,
  218.                 [7] = function()
  219.                     cerv.afaze = 2
  220.                 end,
  221.                 [1] = function()
  222.                     cerv.afaze = 3
  223.                 end,
  224.                 [13] = function()
  225.                     cerv.afaze = 4
  226.                 end,
  227.                 [20] = function()
  228.                     cerv.afaze = 5
  229.                 end,
  230.                 [22] = function()
  231.                     cerv.afaze = 6
  232.                 end,
  233.                 [26] = function()
  234.                     cerv.afaze = 7
  235.                 end,
  236.                 [28] = function()
  237.                     cerv.afaze = 0
  238.                     incViewShift(cerv, -1, -1)
  239.                 end,
  240.                 [32] = function()
  241.                     if viewY(cerv) < cerv.mez then
  242.                         incViewShift(cerv, 1, 1)
  243.                     else
  244.                         cerv.stav = 0
  245.                         cerv.mez = random(cerv.mez - 2)
  246.                     end
  247.                 end,
  248.             }
  249.  
  250.             stav_table[1] = stav_table[0]
  251.             stav_table[2] = stav_table[0]
  252.             stav_table[3] = stav_table[0]
  253.             stav_table[4] = stav_table[0]
  254.  
  255.             stav_table[6] = stav_table[5]
  256.  
  257.             stav_table[8] = stav_table[7]
  258.             stav_table[9] = stav_table[7]
  259.             stav_table[10] = stav_table[7]
  260.  
  261.             stav_table[12] = stav_table[11]
  262.  
  263.             stav_table[14] = stav_table[13]
  264.             stav_table[15] = stav_table[13]
  265.             stav_table[16] = stav_table[13]
  266.             stav_table[17] = stav_table[13]
  267.             stav_table[18] = stav_table[13]
  268.             stav_table[19] = stav_table[13]
  269.  
  270.             stav_table[21] = stav_table[20]
  271.  
  272.             stav_table[23] = stav_table[22]
  273.             stav_table[24] = stav_table[22]
  274.             stav_table[25] = stav_table[22]
  275.  
  276.             stav_table[27] = stav_table[26]
  277.  
  278.             switch(cerv.stav)(stav_table)
  279.             cerv:updateAnim()
  280.         end
  281.     end
  282.  
  283.     -- --------------------
  284.     local update_table = {}
  285.     local subinit
  286.     subinit = prog_init_room()
  287.     if subinit then
  288.         table.insert(update_table, subinit)
  289.     end
  290.     subinit = prog_init_faraon()
  291.     if subinit then
  292.         table.insert(update_table, subinit)
  293.     end
  294.     subinit = prog_init_stela()
  295.     if subinit then
  296.         table.insert(update_table, subinit)
  297.     end
  298.     subinit = prog_init_cerv()
  299.     if subinit then
  300.         table.insert(update_table, subinit)
  301.     end
  302.     return update_table
  303. end
  304. local update_table = prog_init()
  305.  
  306.  
  307. -- -----------------------------------------------------------------
  308. -- Update
  309. -- -----------------------------------------------------------------
  310. function prog_update()
  311.     for key, subupdate in pairs(update_table) do
  312.         subupdate()
  313.     end
  314. end
  315.  
  316.